{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "sys.path.insert(0, '../')\n",
    "\n",
    "from minisom import MiniSom\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.gridspec import GridSpec\n",
    "%matplotlib inline\n",
    "\n",
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.datasets import make_blobs\n",
    "from sklearn.preprocessing import scale"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\r",
      " [   0 / 100 ]   0% ? it/s\r",
      " [   1 / 100 ]   1% 0.00021 it/s\r",
      " [   2 / 100 ]   2% 0.00023 it/s\r",
      " [   3 / 100 ]   3% 0.00024 it/s\r",
      " [   4 / 100 ]   4% 0.00023 it/s\r",
      " [   5 / 100 ]   5% 0.00022 it/s\r",
      " [   6 / 100 ]   6% 0.00022 it/s\r",
      " [   7 / 100 ]   7% 0.00022 it/s\r",
      " [   8 / 100 ]   8% 0.00022 it/s\r",
      " [   9 / 100 ]   9% 0.00023 it/s\r",
      " [  10 / 100 ]  10% 0.00022 it/s\r",
      " [  11 / 100 ]  11% 0.00022 it/s\r",
      " [  12 / 100 ]  12% 0.00022 it/s\r",
      " [  13 / 100 ]  13% 0.00022 it/s\r",
      " [  14 / 100 ]  14% 0.00022 it/s\r",
      " [  15 / 100 ]  15% 0.00022 it/s\r",
      " [  16 / 100 ]  16% 0.00022 it/s\r",
      " [  17 / 100 ]  17% 0.00022 it/s\r",
      " [  18 / 100 ]  18% 0.00022 it/s\r",
      " [  19 / 100 ]  19% 0.00022 it/s\r",
      " [  20 / 100 ]  20% 0.00022 it/s\r",
      " [  21 / 100 ]  21% 0.00022 it/s\r",
      " [  22 / 100 ]  22% 0.00022 it/s\r",
      " [  23 / 100 ]  23% 0.00022 it/s\r",
      " [  24 / 100 ]  24% 0.00022 it/s\r",
      " [  25 / 100 ]  25% 0.00022 it/s\r",
      " [  26 / 100 ]  26% 0.00022 it/s\r",
      " [  27 / 100 ]  27% 0.00022 it/s\r",
      " [  28 / 100 ]  28% 0.00022 it/s\r",
      " [  29 / 100 ]  29% 0.00022 it/s\r",
      " [  30 / 100 ]  30% 0.00022 it/s\r",
      " [  31 / 100 ]  31% 0.00022 it/s\r",
      " [  32 / 100 ]  32% 0.00022 it/s\r",
      " [  33 / 100 ]  33% 0.00022 it/s\r",
      " [  34 / 100 ]  34% 0.00022 it/s\r",
      " [  35 / 100 ]  35% 0.00022 it/s\r",
      " [  36 / 100 ]  36% 0.00022 it/s\r",
      " [  37 / 100 ]  37% 0.00022 it/s\r",
      " [  38 / 100 ]  38% 0.00022 it/s\r",
      " [  39 / 100 ]  39% 0.00022 it/s\r",
      " [  40 / 100 ]  40% 0.00022 it/s\r",
      " [  41 / 100 ]  41% 0.00022 it/s\r",
      " [  42 / 100 ]  42% 0.00022 it/s\r",
      " [  43 / 100 ]  43% 0.00022 it/s\r",
      " [  44 / 100 ]  44% 0.00022 it/s\r",
      " [  45 / 100 ]  45% 0.00022 it/s\r",
      " [  46 / 100 ]  46% 0.00022 it/s\r",
      " [  47 / 100 ]  47% 0.00022 it/s\r",
      " [  48 / 100 ]  48% 0.00022 it/s\r",
      " [  49 / 100 ]  49% 0.00022 it/s\r",
      " [  50 / 100 ]  50% 0.00022 it/s\r",
      " [  51 / 100 ]  51% 0.00022 it/s\r",
      " [  52 / 100 ]  52% 0.00022 it/s\r",
      " [  53 / 100 ]  53% 0.00022 it/s\r",
      " [  54 / 100 ]  54% 0.00022 it/s\r",
      " [  55 / 100 ]  55% 0.00022 it/s\r",
      " [  56 / 100 ]  56% 0.00022 it/s\r",
      " [  57 / 100 ]  57% 0.00022 it/s\r",
      " [  58 / 100 ]  58% 0.00022 it/s\r",
      " [  59 / 100 ]  59% 0.00022 it/s\r",
      " [  60 / 100 ]  60% 0.00022 it/s\r",
      " [  61 / 100 ]  61% 0.00022 it/s\r",
      " [  62 / 100 ]  62% 0.00022 it/s\r",
      " [  63 / 100 ]  63% 0.00022 it/s\r",
      " [  64 / 100 ]  64% 0.00022 it/s\r",
      " [  65 / 100 ]  65% 0.00022 it/s\r",
      " [  66 / 100 ]  66% 0.00022 it/s\r",
      " [  67 / 100 ]  67% 0.00022 it/s\r",
      " [  68 / 100 ]  68% 0.00022 it/s\r",
      " [  69 / 100 ]  69% 0.00022 it/s\r",
      " [  70 / 100 ]  70% 0.00022 it/s\r",
      " [  71 / 100 ]  71% 0.00022 it/s\r",
      " [  72 / 100 ]  72% 0.00022 it/s\r",
      " [  73 / 100 ]  73% 0.00022 it/s\r",
      " [  74 / 100 ]  74% 0.00022 it/s\r",
      " [  75 / 100 ]  75% 0.00022 it/s\r",
      " [  76 / 100 ]  76% 0.00022 it/s\r",
      " [  77 / 100 ]  77% 0.00022 it/s\r",
      " [  78 / 100 ]  78% 0.00022 it/s\r",
      " [  79 / 100 ]  79% 0.00022 it/s\r",
      " [  80 / 100 ]  80% 0.00022 it/s\r",
      " [  81 / 100 ]  81% 0.00022 it/s\r",
      " [  82 / 100 ]  82% 0.00022 it/s\r",
      " [  83 / 100 ]  83% 0.00022 it/s\r",
      " [  84 / 100 ]  84% 0.00022 it/s\r",
      " [  85 / 100 ]  85% 0.00022 it/s\r",
      " [  86 / 100 ]  86% 0.00022 it/s\r",
      " [  87 / 100 ]  87% 0.00022 it/s\r",
      " [  88 / 100 ]  88% 0.00022 it/s\r",
      " [  89 / 100 ]  89% 0.00022 it/s\r",
      " [  90 / 100 ]  90% 0.00022 it/s\r",
      " [  91 / 100 ]  91% 0.00022 it/s\r",
      " [  92 / 100 ]  92% 0.00022 it/s\r",
      " [  93 / 100 ]  93% 0.00022 it/s\r",
      " [  94 / 100 ]  94% 0.00022 it/s\r",
      " [  95 / 100 ]  95% 0.00022 it/s\r",
      " [  96 / 100 ]  96% 0.00022 it/s\r",
      " [  97 / 100 ]  97% 0.00022 it/s\r",
      " [  98 / 100 ]  98% 0.00022 it/s\r",
      " [  99 / 100 ]  99% 0.00022 it/s\r",
      " [ 100 / 100 ] 100% 0.00022 it/s"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "../minisom.py:117: UserWarning: Warning:sigma may be too high for the dimension of the map.\n",
      "  warn('Warning:sigma may be too high for the dimension of the map.')\n"
     ]
    }
   ],
   "source": [
    "outliers_percentage = 0.35\n",
    "inliers = 300\n",
    "outliers = int(inliers * outliers_percentage)\n",
    "\n",
    "\n",
    "data = make_blobs(centers=[[2, 2], [-2, -2]], cluster_std=[.3, .3],\n",
    "                  n_samples=inliers, random_state=0)[0]\n",
    "\n",
    "\n",
    "data = scale(data)\n",
    "data = np.concatenate([data, \n",
    "                       (np.random.rand(outliers, 2)-.5)*4.])\n",
    "\n",
    "\n",
    "som = MiniSom(2, 1, data.shape[1], sigma=1, learning_rate=0.5,\n",
    "              neighborhood_function='triangle', random_seed=10)\n",
    "\n",
    "\n",
    "som.train_batch(data, 100, verbose=True)  # random training"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "quantization_errors = np.linalg.norm(som.quantization(data) - data, axis=1)\n",
    "error_treshold = np.percentile(quantization_errors, \n",
    "                               100*(1-outliers_percentage)+5)\n",
    "is_outlier = quantization_errors > error_treshold"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'frequency')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(quantization_errors)\n",
    "plt.axvline(error_treshold, color='k', linestyle='--')\n",
    "plt.xlabel('error')\n",
    "plt.ylabel('frequency')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nAEiY/x8weOzp93hjtgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8, 8))\n",
    "plt.scatter(data[~is_outlier, 0], data[~is_outlier, 1],\n",
    "            label='inlier')\n",
    "plt.scatter(data[is_outlier, 0], data[is_outlier, 1],\n",
    "            label='outlier')\n",
    "plt.legend()\n",
    "plt.savefig('resulting_images/som_outliers_detection.png')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\r",
      " [   0 / 100 ]   0% ? it/s\r",
      " [   1 / 100 ]   1% 0.00063 it/s\r",
      " [   2 / 100 ]   2% 0.00064 it/s\r",
      " [   3 / 100 ]   3% 0.00061 it/s\r",
      " [   4 / 100 ]   4% 0.00059 it/s\r",
      " [   5 / 100 ]   5% 0.00057 it/s\r",
      " [   6 / 100 ]   6% 0.00057 it/s\r",
      " [   7 / 100 ]   7% 0.00058 it/s\r",
      " [   8 / 100 ]   8% 0.00059 it/s\r",
      " [   9 / 100 ]   9% 0.00059 it/s\r",
      " [  10 / 100 ]  10% 0.00059 it/s\r",
      " [  11 / 100 ]  11% 0.00060 it/s\r",
      " [  12 / 100 ]  12% 0.00059 it/s\r",
      " [  13 / 100 ]  13% 0.00059 it/s\r",
      " [  14 / 100 ]  14% 0.00058 it/s\r",
      " [  15 / 100 ]  15% 0.00059 it/s\r",
      " [  16 / 100 ]  16% 0.00059 it/s\r",
      " [  17 / 100 ]  17% 0.00059 it/s\r",
      " [  18 / 100 ]  18% 0.00059 it/s\r",
      " [  19 / 100 ]  19% 0.00059 it/s\r",
      " [  20 / 100 ]  20% 0.00059 it/s\r",
      " [  21 / 100 ]  21% 0.00059 it/s\r",
      " [  22 / 100 ]  22% 0.00059 it/s\r",
      " [  23 / 100 ]  23% 0.00059 it/s\r",
      " [  24 / 100 ]  24% 0.00059 it/s\r",
      " [  25 / 100 ]  25% 0.00059 it/s\r",
      " [  26 / 100 ]  26% 0.00058 it/s\r",
      " [  27 / 100 ]  27% 0.00058 it/s\r",
      " [  28 / 100 ]  28% 0.00059 it/s\r",
      " [  29 / 100 ]  29% 0.00059 it/s\r",
      " [  30 / 100 ]  30% 0.00060 it/s\r",
      " [  31 / 100 ]  31% 0.00060 it/s\r",
      " [  32 / 100 ]  32% 0.00060 it/s\r",
      " [  33 / 100 ]  33% 0.00060 it/s\r",
      " [  34 / 100 ]  34% 0.00060 it/s\r",
      " [  35 / 100 ]  35% 0.00060 it/s\r",
      " [  36 / 100 ]  36% 0.00061 it/s\r",
      " [  37 / 100 ]  37% 0.00061 it/s\r",
      " [  38 / 100 ]  38% 0.00061 it/s\r",
      " [  39 / 100 ]  39% 0.00061 it/s\r",
      " [  40 / 100 ]  40% 0.00061 it/s\r",
      " [  41 / 100 ]  41% 0.00060 it/s\r",
      " [  42 / 100 ]  42% 0.00060 it/s\r",
      " [  43 / 100 ]  43% 0.00060 it/s\r",
      " [  44 / 100 ]  44% 0.00060 it/s\r",
      " [  45 / 100 ]  45% 0.00060 it/s\r",
      " [  46 / 100 ]  46% 0.00060 it/s\r",
      " [  47 / 100 ]  47% 0.00060 it/s\r",
      " [  48 / 100 ]  48% 0.00060 it/s\r",
      " [  49 / 100 ]  49% 0.00060 it/s\r",
      " [  50 / 100 ]  50% 0.00060 it/s\r",
      " [  51 / 100 ]  51% 0.00060 it/s\r",
      " [  52 / 100 ]  52% 0.00060 it/s\r",
      " [  53 / 100 ]  53% 0.00060 it/s\r",
      " [  54 / 100 ]  54% 0.00060 it/s\r",
      " [  55 / 100 ]  55% 0.00060 it/s\r",
      " [  56 / 100 ]  56% 0.00060 it/s\r",
      " [  57 / 100 ]  57% 0.00060 it/s\r",
      " [  58 / 100 ]  58% 0.00060 it/s\r",
      " [  59 / 100 ]  59% 0.00060 it/s\r",
      " [  60 / 100 ]  60% 0.00060 it/s\r",
      " [  61 / 100 ]  61% 0.00060 it/s\r",
      " [  62 / 100 ]  62% 0.00060 it/s\r",
      " [  63 / 100 ]  63% 0.00060 it/s\r",
      " [  64 / 100 ]  64% 0.00060 it/s\r",
      " [  65 / 100 ]  65% 0.00060 it/s\r",
      " [  66 / 100 ]  66% 0.00060 it/s\r",
      " [  67 / 100 ]  67% 0.00060 it/s\r",
      " [  68 / 100 ]  68% 0.00060 it/s\r",
      " [  69 / 100 ]  69% 0.00060 it/s\r",
      " [  70 / 100 ]  70% 0.00060 it/s\r",
      " [  71 / 100 ]  71% 0.00060 it/s\r",
      " [  72 / 100 ]  72% 0.00060 it/s\r",
      " [  73 / 100 ]  73% 0.00060 it/s\r",
      " [  74 / 100 ]  74% 0.00060 it/s\r",
      " [  75 / 100 ]  75% 0.00060 it/s\r",
      " [  76 / 100 ]  76% 0.00060 it/s\r",
      " [  77 / 100 ]  77% 0.00060 it/s\r",
      " [  78 / 100 ]  78% 0.00060 it/s\r",
      " [  79 / 100 ]  79% 0.00060 it/s\r",
      " [  80 / 100 ]  80% 0.00060 it/s\r",
      " [  81 / 100 ]  81% 0.00060 it/s\r",
      " [  82 / 100 ]  82% 0.00060 it/s\r",
      " [  83 / 100 ]  83% 0.00060 it/s\r",
      " [  84 / 100 ]  84% 0.00060 it/s\r",
      " [  85 / 100 ]  85% 0.00060 it/s\r",
      " [  86 / 100 ]  86% 0.00060 it/s\r",
      " [  87 / 100 ]  87% 0.00060 it/s\r",
      " [  88 / 100 ]  88% 0.00060 it/s\r",
      " [  89 / 100 ]  89% 0.00060 it/s\r",
      " [  90 / 100 ]  90% 0.00060 it/s\r",
      " [  91 / 100 ]  91% 0.00060 it/s\r",
      " [  92 / 100 ]  92% 0.00060 it/s\r",
      " [  93 / 100 ]  93% 0.00060 it/s\r",
      " [  94 / 100 ]  94% 0.00060 it/s\r",
      " [  95 / 100 ]  95% 0.00060 it/s\r",
      " [  96 / 100 ]  96% 0.00060 it/s\r",
      " [  97 / 100 ]  97% 0.00060 it/s\r",
      " [  98 / 100 ]  98% 0.00060 it/s\r",
      " [  99 / 100 ]  99% 0.00060 it/s\r",
      " [ 100 / 100 ] 100% 0.00060 it/s"
     ]
    }
   ],
   "source": [
    "from sklearn.datasets import make_circles\n",
    "data = make_circles(noise=.1, n_samples=inliers, random_state=0)[0]\n",
    "data = scale(data)\n",
    "data = np.concatenate([data, \n",
    "                       (np.random.rand(outliers, 2)-.5)*4.])\n",
    "\n",
    "\n",
    "som = MiniSom(5, 5, data.shape[1], sigma=1, learning_rate=0.5,\n",
    "              neighborhood_function='triangle', random_seed=10)\n",
    "\n",
    "\n",
    "som.train_batch(data, 100, verbose=True)  \n",
    "quantization_errors = np.linalg.norm(som.quantization(data) - data, axis=1)\n",
    "error_treshold = np.percentile(quantization_errors, \n",
    "                               100*(1-outliers_percentage)+5)\n",
    "is_outlier = quantization_errors > error_treshold"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nvCq19D8YV2oAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8, 8))\n",
    "plt.scatter(data[~is_outlier, 0], data[~is_outlier, 1],\n",
    "            label='inlier')\n",
    "plt.scatter(data[is_outlier, 0], data[is_outlier, 1],\n",
    "            label='outlier')\n",
    "#weights = som._weights.reshape(5*5, 2)\n",
    "#plt.scatter(weights[:, 0], weights[:,1],\n",
    "#            marker='+', s=320, c='g', label='weights')\n",
    "plt.legend()\n",
    "plt.savefig('resulting_images/som_outliers_detection_circle.png')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
